import sys
import modelA  # 导入modelA模块,方式1

# from modelA import func1  # 导入modelA模块func1 方式2
from other.modelB import func1

from ..advanced import modelC
# from advanced.modelC import func1   #不同模块有相同名字函数，后引入覆盖前面引入的函数

"""
import 模块说明
(1)想使用 Python 源文件，只需在另一个源文件里执行 import 语句，语法如下：
    import module1[, module2[,... moduleN]
    
(2)取得命令行运行所添加的参数
python using_sys.py 参数1 参数2

#取得命令行运行所添加的参数
print('命令行参数如下:')
for i in sys.argv:
    print(i)
    
sys.path 包含了一个 Python 解释器自动查找所需模块的路径的列表

(3)Python 的 from 语句让你从模块中导入一个指定的部分到当前命名空间中，语法如下：
   from modname import name1[, name2[, ... nameN]]
   如：from modelA import func1
   
   注意：如果在结构中包是一个子包（比如这个例子中对于包sound来说），而你又想导入兄弟包（同级别的包）你就得使用导入绝对的路径来导入
   如果存在目录层级 如上级目录的模块from ..other import func1
   
(4)把一个模块的所有内容全都导入到当前的命名空间也是可行的，只需使用如下声明：
    from modname import *
    （不建议使用，当多个模块有相同函数名会出现覆盖，建议使用（1），（3））
    
(5)__name__属性
一个模块被另一个程序第一次引入时，其主程序将运行。如果我们想在模块被引入时，模块中的某一程序块不执行，
我们可以用__name__属性来使该程序块仅在该模块自身运行时执行
"""

if __name__ == '__main__':
    modelA.func1()

    # 调用 modelB中的函数,不同模块有相同名字函数，后引入覆盖前面引入的函数,只会调用后引入的函数，
    # 这种情况需要使用方式1导入包，通过模块名称.函数名 方式调用
    func1()
    print(dir(modelA))

    #其他模块的引入调用
    advanced.modelC.func1()

else:
    # 直接用import using_name 在命令行执行，将执行这里的else
    print("???")
